public class Demo14 {
	private static final Object locker1=new Object();
	private static final Object locker2=new Object();
	private static final Object locker3=new Object();
	public static void main(String[] args) throws InterruptedException {
		Thread t1=new Thread(()->{
			try{
				for(int i=0;i<10;i++) {
					synchronized (locker1) {
						locker1.wait();
					}
					System.out.print("A");
					synchronized (locker2){
						locker2.notify();
					}
				}
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			}
		});
		Thread t2=new Thread(()->{
			try{
				for(int i=0;i<10;i++) {
					synchronized (locker2) {
						locker2.wait();
					}
					System.out.print("B");
					synchronized (locker3){
						locker3.notify();
					}
				}
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			}
		});
		Thread t3=new Thread(()->{
			try{
				for(int i=0;i<10;i++) {
					synchronized (locker3) {
						locker3.wait();
					}
					System.out.println("C");
					synchronized (locker1){
						locker1.notify();
					}
				}
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			}
		});
		t1.start();
		t2.start();
		t3.start();
		Thread.sleep(1);
		synchronized (locker1) {
			locker1.notify();
		}
	}
}
